'use strict';

// 这里只能注入constant和各种Provider。本阶段主要用于通过Provider对各种服务进行配置。
angular.module('com.dcos.app').config(function($httpProvider) {

  // 登陆成功后，设置之后所有请求header中的token
  $httpProvider.interceptors.push('tokenService');

  $httpProvider.interceptors.push(['$rootScope', '$q', 'HttpPendingRequestsService', function($rootScope, $q, HttpPendingRequestsService){
  	return {
  		// 给请求头加上timeout属性，用以取消request
  		request: function (config) {
  			config = config || {};
  			if (config.timeout === undefined && !config.noCancelOnRouteChange) {
  				config.timeout = HttpPendingRequestsService.newTimeout();
  			}
  			return config;
  		},

	    responseError: function (response) {
        // 如果修改密码返回401(说明输入原始密码错误)，不返回登录页
        if((/\w+\/password$/).test(response.config.url)){
          return $q.reject(response);
        }
	      // 如果服务器返回了401 unauthorized，那么就表示需要登录
	      if(response.status == 401){
		      $rootScope.$broadcast('unauthorized');
	      }
	      // 如果是被取消导致
	      if(response.config.timeout.isGloballyCancelled){
	      	return $q.defer().promise;
	      }
	      return $q.reject(response);
	    }
  	};
  }]);

});
